﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SistemadeEstágios.Negocio;
using SistemadeEstágios.Model;

namespace SistemadeEstágios
{
    public partial class frmCadEmpresas : Form
    {
        public EnpresasNG _empresa;
        public BuscaCepNG _BuscaCEP;
        private bool isNovo = false;
        public frmCadEmpresas()
        {
            InitializeComponent();
            TxtCodigo.Text = BuscaCodigo().ToString();
        }

        private void BtnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void BtnBscResponsavel_Click(object sender, EventArgs e)
        {
            frmPesquisa frm = new frmPesquisa();
            frm.titulo = "Pesquisa por Responsável";
            frm.Tipo = TipoPesquisa.Empresa;
            frm.ShowDialog();
            if (frm.bRetorno == true)
            {
                TxtCodigo.Text = frm.iRetorno.ToString();
                TxtMatricula_Validating(TxtCodigo, new CancelEventArgs());
            }

            frm.Close();
        }

        #region KeyPress
        private void TxtNome_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtMatricula_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtNomeSupervisor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCargo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtTelefone_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCurso_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCEP_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void TxtCidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Back)
            {
                e.Handled = false;
            }
            else if (char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        #endregion

        #region Key Up
        private void TxtMatricula_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F2)
            {
                BtnBscResponsavel_Click(BtnBscResponsavel, new EventArgs());
            }
        }

        #endregion

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            LimpaCampos();
            isNovo = false;
        }

        #region TxtMatricula_Validating
        private void TxtMatricula_Validating(object sender, CancelEventArgs e)
        {
            Empresas empresa;
            _empresa = new EnpresasNG();
            if (!string.IsNullOrEmpty(TxtCodigo.Text))
            {
                empresa = _empresa.Buscar(Int32.Parse(TxtCodigo.Text));
                if (empresa != null)
                {
                    PreencheCampos(empresa);
                    isNovo = false;
                }
                else
                {
                    isNovo = true;
                }
            }
        } 
        #endregion

        private void BtnConfirmar_Click(object sender, EventArgs e)
        {
            if (VerificaCampos())
            {
                Empresas empresa = new Empresas();

                empresa.Codigo = Int32.Parse(TxtCodigo.Text);
                empresa.Nome = TxtNome.Text;
                empresa.CNPJ = TxtCnpj.Text.Replace(".", "").Replace("/", "").Replace("-", "");
                empresa.SupervisorNome = TxtNomeSupervisor.Text;
                empresa.SupervisorCargo = TxtCargo.Text;
                empresa.DataInicial = DateTime.Parse(DtpInicial.Text);
                empresa.DataFinal = DateTime.Parse(DtpFinal.Text);
                empresa.SupervisorEmail = TxtEmail.Text;
                empresa.SupervisorTelefone = TxtTelefone.Text;
                empresa.CEP = TxtCEP.Text;
                empresa.Cidade = TxtCidade.Text;
                empresa.Endereco = TxtLogradouro.Text;

                if (_empresa.Inserir(empresa, isNovo))
                    LimpaCampos();
            }
        }

        private void TxtCnpj_Validating(object sender, CancelEventArgs e)
        {
            MaskedTextProvider mask;
            TxtCnpj.Text = TxtCnpj.Text.Replace(".", "").Replace("-", "").Replace("/", "");
            if (TxtCnpj.Text.Length == 14)
            {
                mask = new MaskedTextProvider("00,000,000/0000-00");
                mask.Set(TxtCnpj.Text);
                TxtCnpj.Text = mask.ToString();
            }
            else if (TxtCnpj.Text == "")
            {
                MessageBox.Show("CNPJ não pode ser nulo. Tente novamente.", "SIGE");
                TxtCnpj.Focus();
                TxtCnpj.SelectAll();
            }
            else
            {
                MessageBox.Show("CNPJ Inválido. Tente novamente.", "SIGE");
                TxtCnpj.Focus();
                TxtCnpj.SelectAll();
            }
        }

        private void DtpInicial_Validating(object sender, CancelEventArgs e)
        {
            DateTime dt1, dt2;

            dt1 = DtpInicial.Value;
            dt2 = DateTime.Parse(DateTime.Now.ToShortDateString());
            if (DateTime.Compare(dt1, dt2) < 0)
            {
                MessageBox.Show("A Data Inicial não pode ser anterior a data atual.");
                DtpInicial.Focus();
            }
            else
            {
                DtpFinal.Value = DtpFinal.Value.AddYears(5);
            }
        }

        private void TxtEmail_Validating(object sender, CancelEventArgs e)
        {
            if (TxtEmail.Text.Length > 5)
                if (TxtEmail.Text.IndexOf("@") < 1)
                {
                    TxtEmail.Focus();
                    TxtEmail.SelectAll();
                    MessageBox.Show("Email inválido. Tente novamente.");
                }
        }

        #region Métodos Autonomos
        public void LimpaCampos()
        {
            foreach (Control ctl in Controls)
            {
                if (ctl.GetType() == typeof(GroupBox))
                {
                    foreach (Control control in ctl.Controls)
                    {
                        if (control.GetType() == typeof(TextBox))
                        {
                            control.Text = "";
                        }
                        else if (control.GetType() == typeof(DateTimePicker))
                        {
                            var dtp = (DateTimePicker)control;
                            dtp.Value = DateTime.Now;
                        }
                        else if (ctl.GetType() == typeof(GroupBox))
                        {
                            foreach (Control cont in control.Controls)
                            {
                                if (cont.GetType() == typeof(TextBox))
                                {
                                    cont.Text = "";
                                }
                            }
                        }
                    }
                }
            }
            TxtCodigo.Text = BuscaCodigo().ToString();
            TxtCodigo.Focus();
        }

        private void PreencheCampos(Empresas empresa)
        {
            TxtCodigo.Text = empresa.Codigo.ToString();
            TxtNome.Text = empresa.Nome;
            TxtCnpj.Text = String.Format(@"{0:00\.000\.000\/0000\-00}", empresa.CNPJ);
            TxtNomeSupervisor.Text = empresa.SupervisorNome;
            DtpInicial.Text = empresa.DataInicial.ToShortDateString();
            DtpFinal.Text = empresa.DataFinal.ToShortDateString();
            TxtCargo.Text = empresa.SupervisorCargo;
            TxtEmail.Text = empresa.SupervisorEmail;
            TxtTelefone.Text = empresa.SupervisorTelefone;
            TxtCEP.Text = empresa.CEP;
            TxtLogradouro.Text = empresa.Endereco;
            TxtCidade.Text = empresa.Cidade;
        }

        private bool VerificaCampos()
        {
            bool retorno = false;
            if (string.IsNullOrEmpty(TxtCodigo.Text))
            {
                TxtCodigo.Focus();
                TxtCodigo.SelectAll();
                MessageBox.Show("Campo Código deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtNome.Text))
            {
                TxtNome.Focus();
                TxtNome.SelectAll();
                MessageBox.Show("Campo Nome deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtNomeSupervisor.Text))
            {
                TxtNomeSupervisor.Focus();
                TxtNomeSupervisor.SelectAll();
                MessageBox.Show("Campo Nome Supervisor deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtCargo.Text))
            {
                TxtCargo.Focus();
                TxtCargo.SelectAll();
                MessageBox.Show("Campo Cargo deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtEmail.Text))
            {
                TxtEmail.Focus();
                TxtEmail.SelectAll();
                MessageBox.Show("Campo Email deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtTelefone.Text))
            {
                TxtTelefone.Focus();
                TxtTelefone.SelectAll();
                MessageBox.Show("Campo Telefone deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtCEP.Text))
            {
                TxtCEP.Focus();
                TxtCEP.SelectAll();
                MessageBox.Show("Campo CEP deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtCidade.Text))
            {
                TxtCidade.Focus();
                TxtCidade.SelectAll();
                MessageBox.Show("Campo Cidade deve ser preenchido. Tente novamente.");
            }
            else if (string.IsNullOrEmpty(TxtLogradouro.Text))
            {
                TxtLogradouro.Focus();
                TxtLogradouro.SelectAll();
                MessageBox.Show("Campo Endereço deve ser preenchido. Tente novamente.");
            }
            else
                retorno = true;

            return retorno;
        }

        private int BuscaCodigo()
        {
            _empresa = new EnpresasNG();

            return _empresa.Ultimo();
        }

        #endregion

        private void TxtCEP_Validating(object sender, CancelEventArgs e)
        {
            _BuscaCEP = new BuscaCepNG();

            CEP cep = _BuscaCEP.Busca(TxtCEP.Text);

            if (cep.Resultado.Equals("1") || cep.Resultado.Equals("2"))
            {
                TxtCidade.Text = cep.Cidade;
                TxtLogradouro.Text = cep.TipoLogradouro + " " + cep.Logradouro + ", " + cep.Bairro;
            }
        }

    }
}
